/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2001 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.corba.idl.node; import java.util.Vector; import java.util.Enumeration; import org.openide.nodes.*; import org.openide.filesystems.*; //import org.openide. import org.netbeans.modules.corba.*; import org.netbeans.modules.corba.idl.src.*; /** * Class IDLDocumentChildren * * @author Karel Gardas */ public class IDLDocumentChildren extends Children.Keys { //public static final boolean DEBUG = true; public static final boolean DEBUG = false; private IDLDataObject ido; //private org.netbeans.modules.corba.idl.src.SimpleNode src; private IDLElement src; private IDLNode idlNode; public IDLDocumentChildren (IDLDataObject v) throws java.io.FileNotFoundException { super (); ido = v; //idlNode = node; } public IDLDocumentChildren (IDLElement tree) { src = tree; if (src != null) createKeys (); } public void setNode (IDLNode node) { idlNode = node; } public void setSrc (IDLElement s) { if (DEBUG) System.out.println ("setSrc (" + s.getName () + ");"); src = s; } protected org.openide.nodes.Node[] vector2nodes (Vector nodes) { org.openide.nodes.Node[] retval = new org.openide.nodes.Node[nodes.size ()]; for (int i=0; i<nodes.size (); i++) retval[i] = (org.openide.nodes.Node)nodes.elementAt (i); return retval; } public void createKeys () { Vector keys = new Vector (); if (DEBUG) System.out.println ("createKeys ()"); if (src == null) return; if (DEBUG) { System.out.println ("setKeys (" + src.getName () + ");"); Vector tmp = src.getMembers (); for (int i=0; i<tmp.size (); i++) { System.out.println ("key: " + ((IDLElement)tmp.elementAt (i)).getName ()); } src.xDump (" "); } setKeys (src.getMembers ()); /* for (int i=0; i<src.getMembers ().size (); i++) { refreshKey (src.getMember (i)); } */ /* org.openide.nodes.Node[] nodes = getNodes (); for (int i=0; i<nodes.length; i++) { try { ((IDLDocumentChildren)nodes[i].getChildren ()).createKeys (); } catch (ClassCastException e) { System.out.println (e); } } */ /* Enumeration nodes = nodes (); while (nodes.hasMoreElements ()) { try { ((IDLDocumentChildren)((org.openide.nodes.Node)nodes.nextElement ()).getChildren ()).createKeys (); } catch (ClassCastException e) { //if (DEBUG) // e.printStackTrace (); } } */ if (DEBUG) System.out.println ("---end of createKeys ()----------"); } protected org.openide.nodes.Node[] createNodes (Object key) { if (DEBUG) { try { System.out.println ("createNodes (" + key + ");"); } catch (Exception e) { e.printStackTrace (); } } org.openide.nodes.Node[] ret_nodes; Vector nodes = new Vector (); IDLElement child = (IDLElement)key; if (child instanceof ModuleElement) { if (DEBUG) System.out.println ("found module"); nodes.addElement (new IDLModuleNode ((ModuleElement) child)); return vector2nodes (nodes); } if (child instanceof InterfaceElement) { if (DEBUG) System.out.println ("found interface"); nodes.addElement (new IDLInterfaceNode ((InterfaceElement) child)); return vector2nodes (nodes); } if (child instanceof InterfaceForwardElement) { if (DEBUG) System.out.println ("found forward interface"); nodes.addElement (new IDLInterfaceForwardNode ((InterfaceForwardElement) child)); return vector2nodes (nodes); } /* if (child instanceof ValueAbsElement) { if (DEBUG) System.out.println ("found abstract valuetype"); nodes.addElement (new IDLValueAbsNode ((ValueAbsElement) child)); return vector2nodes (nodes); } if (child instanceof ValueElement) { if (DEBUG) System.out.println ("found valuetype"); nodes.addElement (new IDLValueNode ((ValueElement) child)); return vector2nodes (nodes); } */ if (child instanceof OperationElement) { if (DEBUG) System.out.println ("found operation"); nodes.addElement (new IDLOperationNode ((OperationElement) child)); return vector2nodes (nodes); } if (child instanceof AttributeElement) { if (DEBUG) System.out.println ("found attribute"); nodes.addElement (new IDLAttributeNode ((AttributeElement) child)); return vector2nodes (nodes); } // test if this is important for creating struct or union or enum node or isn't // it is important for struct (enums and unoins) nested for example in union if (child instanceof StructTypeElement) { if (DEBUG) System.out.println ("found struct type element"); nodes.addElement (new IDLStructTypeNode ((TypeElement) child)); return vector2nodes (nodes); } if (child instanceof UnionTypeElement) { if (DEBUG) System.out.println ("found union type element"); nodes.addElement (new IDLUnionTypeNode ((UnionTypeElement) child)); return vector2nodes (nodes); } if (child instanceof UnionMemberElement) { Object first_member = child.getMember (0); if (first_member instanceof StructTypeElement) { nodes.addElement (new IDLStructTypeNode ((TypeElement) first_member)); } if (first_member instanceof EnumTypeElement) { nodes.addElement (new IDLEnumTypeNode ((TypeElement) first_member)); } if (first_member instanceof UnionTypeElement) { nodes.addElement (new IDLUnionTypeNode ((TypeElement) first_member)); } if (DEBUG) System.out.println ("found union member element"); nodes.addElement (new IDLUnionMemberNode ((UnionMemberElement) child)); return vector2nodes (nodes); } if (child instanceof EnumTypeElement) { if (DEBUG) System.out.println ("found enum type element"); nodes.addElement (new IDLEnumTypeNode ((TypeElement) child)); return vector2nodes (nodes); } if (child instanceof ConstElement) { if (DEBUG) System.out.println ("found const element"); nodes.addElement (new IDLConstNode ((ConstElement) child)); return vector2nodes (nodes); } if (child instanceof TypeElement) { if (DEBUG) System.out.println ("found type element"); Vector members = ((TypeElement) child).getMembers (); if (DEBUG) System.out.println ("members" + members); if ((members.elementAt (0) instanceof StructTypeElement || members.elementAt (0) instanceof UnionTypeElement || members.elementAt (0) instanceof EnumTypeElement)) { if (members.size () == 1) { if (DEBUG) System.out.println ("1----------------------------"); // constructed type whithout type children if (members.elementAt (0) instanceof StructTypeElement) nodes.addElement (new IDLStructTypeNode (((TypeElement) ((TypeElement) child).getMembers ().elementAt (0)))); if (members.elementAt (0) instanceof UnionTypeElement) nodes.addElement (new IDLUnionTypeNode (((UnionTypeElement) ((TypeElement) child).getMembers ().elementAt (0)))); if (members.elementAt (0) instanceof EnumTypeElement) nodes.addElement (new IDLEnumTypeNode (((TypeElement) ((TypeElement) child).getMembers ().elementAt (0)))); } else { if (DEBUG) System.out.println ("2--------------------------"); // constructed type whith type children Vector tmp_members = ((TypeElement) child).getMembers (); // add constructed type String name; IDLType type; if (tmp_members.elementAt (0) instanceof StructTypeElement) nodes.addElement (new IDLStructTypeNode (((TypeElement) ((TypeElement) child).getMembers ().elementAt (0)))); if (tmp_members.elementAt (0) instanceof UnionTypeElement) nodes.addElement (new IDLUnionTypeNode (((UnionTypeElement) ((TypeElement) child).getMembers ().elementAt (0)))); if (tmp_members.elementAt (0) instanceof EnumTypeElement) nodes.addElement (new IDLEnumTypeNode (((TypeElement) ((TypeElement) child).getMembers ().elementAt (0)))); //nodes.addElement (new IDLTypeNode // ((TypeElement)((TypeElement) child).getMembers ().elementAt (0))); //name = ((TypeElement) ((TypeElement) child).getMembers ().elementAt (0)).getName (); type = ((TypeElement) ((TypeElement) child).getMembers ().elementAt (0)).getType (); // add constructed type instances if (DEBUG) { //System.out.println ("name: " + name); System.out.println ("type: " + type); } for (int j=1; j<tmp_members.size (); j++) { if (DEBUG) System.out.println ("adding declarator: " + j); nodes.addElement (new IDLDeclaratorNode ((DeclaratorElement)tmp_members.elementAt (j))); //if (DEBUG) //System.out.println ("adding member: " + j); //MemberElement tme = new MemberElement (-1); //tme.addMember ((Identifier)tmp_members.elementAt (j)); //tme.setName (((Identifier)tmp_members.elementAt (j)).getName ()); //tme.setType (type); //tme.setType ("type"); //((Element)tme.getMember (0)).setName (name); //((Element)tme.getMember (0)).setType (type); //nodes.addElement (new IDLMemberNode // (tme)); } } } else { if (DEBUG) System.out.println ("3-----------------------"); // simple types => make MemberNodes Vector tmp_members = ((TypeElement) child).getMembers (); IDLType type = ((TypeElement) child).getType (); for (int j=0; j<tmp_members.size (); j++) { if (tmp_members.elementAt (j) instanceof DeclaratorElement) nodes.addElement (new IDLDeclaratorNode ((DeclaratorElement)tmp_members.elementAt (j))); //MemberElement tme = new MemberElement (-1); //tme.addMember ((Identifier)tmp_members.elementAt (j)); //tme.setName (((Identifier)tmp_members.elementAt (j)).getName ()); //tme.setType (type); //tme.setType (type); //if (!tme.getType ().equals (tme.getName ())) { // if not member of not_simple type //nodes.addElement (new IDLMemberNode //(tme)); //} } } return vector2nodes (nodes); } if (child instanceof ExceptionElement) { if (DEBUG) System.out.println ("found exception"); nodes.addElement (new IDLExceptionNode ((ExceptionElement) child)); return vector2nodes (nodes); } //if (child instanceof DeclaratorElement) { //if (DEBUG) //System.out.println ("found member"); //nodes.addElement (new IDLDeclaratorNode //((DeclaratorElement) child)); //return vector2nodes (nodes); //} if (child instanceof MemberElement) { if (DEBUG) System.out.println ("found member"); if (child.getMember (0) instanceof DeclaratorElement) { for (int j = 0; j<child.getMembers ().size (); j++) { // standard MemberElement with ids nodes.addElement (new IDLDeclaratorNode ((DeclaratorElement) child.getMember (j))); if (DEBUG) System.out.println ("adding node for " + ((DeclaratorElement) child.getMember (j)).getName () + ": " + ((DeclaratorElement) child.getMember (j)).getType ()); } } else { // recursive MemberElement Vector tmp_members = child.getMembers (); if (child.getMembers ().elementAt (0) instanceof StructTypeElement) nodes.addElement (new IDLStructTypeNode ((TypeElement) child.getMember (0))); if (child.getMembers ().elementAt (0) instanceof UnionTypeElement) nodes.addElement (new IDLUnionTypeNode ((UnionTypeElement) child.getMember (0))); if (child.getMembers ().elementAt (0) instanceof EnumTypeElement) nodes.addElement (new IDLEnumTypeNode ((TypeElement) child.getMember (0))); //nodes.addElement (new IDLTypeNode // ((TypeElement) child.getMember (0))); //nodes.addElement (new IDLMemberNode // ((MemberElement) child.getMember (1)) IDLType type = ((MemberElement) child).getType (); for (int j=1; j<tmp_members.size (); j++) { if (tmp_members.elementAt (j) instanceof DeclaratorElement) { if (DEBUG) System.out.println ("adding declarator: " + j); nodes.addElement (new IDLDeclaratorNode ((DeclaratorElement)tmp_members.elementAt (j))); } /* if (tmp_members.elementAt (j) instanceof Identifier) { if (DEBUG) System.out.println ("adding member: " + j); MemberElement tme = new MemberElement (-1); tme.addMember ((Identifier)tmp_members.elementAt (j)); tme.setName (((Identifier)tmp_members.elementAt (j)).getName ()); tme.setType (type); //tme.setType ("type"); //((Element)tme.getMember (0)).setName (name); //((Element)tme.getMember (0)).setType (type); nodes.addElement (new IDLMemberNode (tme)); } */ } } return vector2nodes (nodes); } if (DEBUG) System.out.println ("return empty nodes"); return new org.openide.nodes.Node[0]; } /* class FileListener extends FileChangeAdapter { public void fileChanged (FileEvent e) { if (DEBUG) System.out.println ("idl file was changed."); //IDLDocumentChildren.this.parse (); //IDLDocumentChildren.this.createKeys (); IDLDocumentChildren.this.startParsing (); } public void fileRenamed (FileRenameEvent e) { if (DEBUG) System.out.println ("IDLDocumentChildren.FileListener.FileRenamed (" + e + ")"); } } */ } /* * $Log * $ */